跳至主要内容

inRange

🔸 題目描述

請實作一個函式 inRange 。此函式接受三個參數:

  • value:要檢查的數值
  • start:範圍的下限 (範圍包含 start),預設為 0
  • end:範圍的上限 (範圍不包含 end)

在實作時,要同時考量以下條件:

  • 預設行為:如果僅提供兩個參數,則第二個參數被視為 end,而 start 此時預設為 0,這樣會讓使用該函式的人,在正數範圍內能更簡易地使用
  • 負數範圍:如果 start 大於 endinRange 會交換參數以正確處理負數範圍,確保在正負數都能被處理
  • 輸出:inRange 函式輸出會是一個 Boolean
inRange(3, 2, 4); // => true
inRange(4, 8); // => true
inRange(4, 2); // => false
inRange(2, 2); // => false
inRange(1.2, 2); // => true

Tests

test.ts
import { describe, expect, test } from "@jest/globals";
import inRange from "./inRange";

describe("inRange", () => {
test("returns true when value is within the range", () => {
expect(inRange(3, 2, 4)).toBe(true);
expect(inRange(4, 8)).toBe(true);
});

test("returns false when value is outside the range", () => {
expect(inRange(4, 2)).toBe(false);
expect(inRange(2, 2)).toBe(false);
});

test("handles negative ranges correctly", () => {
expect(inRange(-3, -2, -4)).toBe(true);
expect(inRange(-4, -2)).toBe(false);
expect(inRange(-2, -2)).toBe(true);
expect(inRange(-1, -2)).toBe(true);
});

test("handles decimal values correctly", () => {
expect(inRange(1.2, 2)).toBe(true);
expect(inRange(1.2, 0.5, 1)).toBe(false);
});
});

Solutions

solution1.js
function inRange(value, start, end = 0) {
return value >= Math.min(start, end) && value < Math.max(start, end)
}
//Math.min(start, end) 會返回 start 和 end 中的最小值。如果 value 大於或等於這個最小值,那麼 value 就不會低於範圍的下限。
//Math.max(start, end) 會返回 start 和 end 中的最大值。如果 value 小於這個最大值,那麼 value 就不會超過範圍的上限。
export default inRange;